#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#       carta.py
"""Modulo donde habita la clase carta"""
#VERSION 0.1
class Carta(object):
    """Clase carta"""
    def __init__(self, atributos):
        """Constructor.
        Recibe: nombre, norte, sur, este, oeste"""
        
        self.nombre = atributos[0]
        self.norte = atributos[1]
        self.sur = atributos[2]
        self.este = atributos[3]
        self.oeste = atributos[4]
        self.dueno = None
    
    def get_fuerza(self,direccion):
        if direccion == "n":
            return self.norte
        elif direccion == "s":
            return self.sur
        elif direccion == "e":
            return self.este
        elif direccion == "o":
            return self.oeste
        

        
    def set_dueno(self, dueno):
        """Define al dueño de la carta"""
        #  @param dueño
        #  @return None
        self.dueno = dueno

    def get_dueno(self):
        if self.dueno:
            return self.dueno
        
    def __str__(self):
        """string"""
        return """Nombre: %s - N: %s, S: %s, E: %s ,O: %s""" % \
        (self.nombre, self.norte, self.sur, self.este, self.oeste)

    def comparar(self, pos, tablerito, jugador1, jugador2):
        """compara una carta con todos sus adyacentes """
        direccion_nodo_adyacente = ""
        carta_rival = ""
        nodo_destino = tablerito.pos[pos]
        direccion_invertida={"n":"s", "s":"n", "e":"o", "o":"e"}
        for direccion_nodo_adyacente in nodo_destino.nodos_adyacentes.iterkeys(): #recorro las direcciones adyacentes
            pos_nodo_adyacente = nodo_destino.nodos_adyacentes.get(direccion_nodo_adyacente, None)
            if pos_nodo_adyacente:
                pos_nodo_adyacente = tablerito.pos[pos_nodo_adyacente]
                carta_rival = pos_nodo_adyacente.get_carta() #obtengo la carta del nodo
                carta_elegida = tablerito.pos[pos].get_carta()
            
            if carta_rival and pos_nodo_adyacente and carta_rival.dueno != carta_elegida.dueno :
                # Si hay una carta junto a la propia cuyo dueño es otro que el jugador:
                fza_rival= carta_rival.get_fuerza(direccion_invertida[direccion_nodo_adyacente])
                fza_carta_elegida = carta_elegida.get_fuerza(direccion_nodo_adyacente)
                if fza_carta_elegida >= fza_rival and pos_nodo_adyacente.pos: #comparo los bordes
                    tablerito.pos[pos_nodo_adyacente.pos].carta.set_dueno(carta_elegida.dueno)
                    if jugador1.identificador == carta_elegida.dueno: #Cargo los puntos
                        carta_rival.set_dueno(jugador1.identificador)
                        jugador1.set_puntaje(+1)
                        jugador2.set_puntaje(-1)
                    else:
                        carta_rival.set_dueno(jugador2.identificador)
                        jugador2.set_puntaje(+1)
                        jugador1.set_puntaje(-1)

        

